package com.boss.salary.dao;

import com.alibaba.fastjson.JSONArray;
import com.boss.framework.dto.PaginationDTO;
import com.boss.salary.entity.AgencyInfo;
import com.boss.salary.entity.AgencyVerify;
import com.boss.sys.ca.user.dto.UserDTO;

import java.util.List;
import java.util.Map;

/**
 * @author :李帅
 * date：2020/10/16
 */
public interface IAgencyInfoDao {
    /**
     * 新增
     * @param agencyInfo
     */
    void insertAgencyInfo(AgencyInfo agencyInfo);

    /**
     * 根据id删除
     * @param id
     */
    void deleteAgencyInfo(String id);

    /**
     * 修改
     * @param agencyInfo
     */
    void updateAgencyInfo(AgencyInfo agencyInfo);

    /**
     * 获取数据量
     * @return
     */
    int queryAgencyInfoTotal(Map<String, Object> queryParam, List<String> childrenId);

    /**
     * 分页查询
     * @param paginationDTO
     * @return
     */
    List<AgencyInfo> queryAgencyInfoPage(PaginationDTO paginationDTO, Map<String, Object> queryParam, List<String> childrenId);

    /**
     * 根据id获取机构名称，工资送审状态及工资审核状态
     * @param id
     * @return
     */
    Map<String, Object> selectAgencyNameAndState(String id);

    /**
     * 获取单位信息
     * @param childrenId
     * @return
     */
    List<AgencyInfo> queryAgencyInfo(List<String> childrenId);

    /**
     * 根据id获取单位信息
     * @param queryParam
     * @return
     */
    List<AgencyInfo> queryAgencyInfoById(Map<String, Object> queryParam);

    /**
     * 获取单位树
     * @return
     */
    List<AgencyInfo> getAgencyTreeData(String agencyId,String mofDivCode);
    /**
     * 获取单位树包括已经删除的单位
     * @return
     */
    List<AgencyInfo> getAgencyTree(String agencyId,String mofDivCode);

    /**
     * 获取单位树(过滤财务已送审)
     * @return
     */
    List<AgencyInfo> getAgencyTreeDatas(String agencyId,String mofDivCode,List<String> bizKeys);

    /**
     * 通过父级id查询子级id集合
     * @return
     */
    List<String> getAgencyChildrenIds(String parentId);

    /**
     * 获取所有单位
     * @return
     */
    List<AgencyInfo> getAllAgency(UserDTO userDTO);

    /**
     * 根据id批量获取单位信息
     * @param ids
     * @return
     */
    List<AgencyInfo> getAgencyInfoList(List<String> ids);

    /**
     * 批量插入历史表数据
     * @param params
     */
    void batchSaveAgencyHistory(List<Object[]> params);

    /**
     * 根据单位id和月份删除历史表数据
     * @param month
     * @param agencyIds
     */
    void deleteAgencyHistory(String month, List<String> agencyIds);

    /**
     * 根据id查询名字
     * @param id
     * @return
     */
    AgencyInfo getNameById(String id);

    /**
     * 根据名字查id
     * @param name
     * @return
     */
    String getIdByName(String name);

    /**
     * 根据id查code
     * @param agencyId
     * @return
     */
    String getCodeByAgencyId(String agencyId);

    /**
     * 获取用户权限中第一个机构数据
     * @param agencyId
     * @return
     */
    AgencyInfo selectFirstAuthAgencyData(String agencyId);

    /**
     * 从权限中获取统发单位
     * @param jsonArray
     * @return
     */
    List<String> selectSendSalaryAgencyId(JSONArray jsonArray,UserDTO userDTO);

    /**
     * 获取区划下所有机构id
     * @param province
     * @return
     */
    List<String> selectAllAgencyIdByProvince(String province);

    /**
     * 获取存在人员的全部机构id
     * @return
     */
    List<String> selectAgencyIdsByProvince(String province);

    /**
     * 通过银行code在人员扩展表查询所有涉及到得单位id
     * @param queryForm
     * @return
     */
    List<String> getAgencyIdsByBank(Map<String,Object> queryForm);

    /**
     * 通过leafId查询id
     * @return
     */
    List<String> getIds();

    /**
     * 根据agencyCode查询agencyId
     * @return
     */
    List<String> getAgencyIds(List<String> agencyCodes);


    /**
     * 根据agencyCode查询agencyId 和code
     * @return
     */
    List<Map<String, Object>> getAgencyId(List<String> agencyCodes,String mofDivCode);

    /**
     * 根据区划查找所有单位编码
     * @returnv
     */
    List<String> getAgencyCodes(String province);

    /**
     * 查询id
     * @return
     */
    List<AgencyInfo> queryid( String province);

    /**
     * 获取单位树
     * @return
     */
    List<AgencyInfo> getNotAuditAuthAgencyTreeData(String agencyId,String mofDivCode,List<String> bizKeys);

    int agencyPerson(String id);

    void updateAgencyExt(AgencyInfo agencyInfo);

    void updateAgencyVerify(AgencyInfo agencyInfo);

    void updateAgencyInfoCodeParentId(List<AgencyVerify> updateList);



    /**
     * 根据单位ID获取是否允许上报
     * @return
     */
    Integer getSubmitAble(String agencyId);

    /**
     * 根据传入得集合查询区划下禁止上报得单位信息
     * @param province
     * @return
     */
    List<AgencyInfo> getSubmitAbleByAgencyIds(String province,List<String> agencyIds);


    List<AgencyVerify> getCodeByAgency(String agencyId);
}
